package com.rwaste.clientuser.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.rwaste.clientuser.entity.ClientUser;
import com.rwaste.clientuser.entity.vo.UserQuery;
import com.rwaste.clientuser.service.ClientUserService;
import com.rwaste.commonutils.MD5;
import com.rwaste.commonutils.Msg;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author wxc
 * @since 2021-09-25
 */
@RestController
@RequestMapping("/clientuser/user")
public class ClientUserController {

    @Autowired
    private ClientUserService clientUserService;

    /**
     * 查询所有用户的列表
     * @return 统一返回类型Msg
     */
    @GetMapping("list")
    public Msg getList(){
        return Msg.success().add("list", clientUserService.list());
    }

    /**
     * 按照条件分页查询用户列表
     * @param userQuery 查询的条件
     * @return 统一返回类型Msg
     */
    @GetMapping("optionsList")
    public Msg getOptionsList(UserQuery userQuery){

        //page对象
        Page<ClientUser> resultPage = new Page<>(userQuery.getPage(), userQuery.getLimit());

        //创建条件
        QueryWrapper<ClientUser> wrapper = new QueryWrapper<>();

        if(userQuery.getMobile() != null){
            wrapper.like("mobile", userQuery.getMobile());
        }
        if(userQuery.getIsFreeze() != null){
            wrapper.eq("is_freeze", userQuery.getIsFreeze());
        }
        if(userQuery.getSort() != null){
            if(userQuery.getSort().equals("+id")){
                wrapper.orderByAsc("creation_time");
            }else{
                wrapper.orderByDesc("creation_time");
            }
        }

        clientUserService.page(resultPage, wrapper);
        List<ClientUser> list = resultPage.getRecords(); //查询的list
        long total = resultPage.getTotal(); //总记录数

        return Msg.success().add("list", list).add("total", total);
    }

    /**
     * 根据用户id逻辑删除用户
     * @param id 用户id
     * @return 统一返回类型Msg
     */
    @DeleteMapping("deleteUserById/{id}")
    public Msg deleteUserById(@PathVariable("id") String id){

        boolean flag = clientUserService.removeById(id);

        return flag ? Msg.success("删除成功") : Msg.success("删除失败");
    }


    /**
     * 切换用户的冻结状态
     * @param id 用户的id
     * @param status 修改为 什么状态 (0为解冻、1为冻结)
     * @return 统一返回类型Msg
     */
    @PutMapping("freezeStatusById/{id}/{status}")
    public Msg freezeStatusById(@PathVariable("id") String id,
                                @PathVariable("status") Integer status){

        ClientUser user = new ClientUser();
        user.setId(id);
        user.setIsFreeze(status);


        boolean flag = clientUserService.updateById(user);

        return flag ? Msg.success() : Msg.fail();
    }

    /**
     * 根据id获取用户信息
     * @param id 用户id
     * @return 统一返回类型Msg
     */
    @GetMapping("getUserById/{id}")
    public Msg getUserById(@PathVariable("id") String id){
        ClientUser user = clientUserService.getById(id);
        return Msg.success().add("user", user);
    }

    /**
     * 添加用户
     * @param user 用户的信息
     * @return 统一返回类型Msg
     */
    @PostMapping("/insertUser")
    public Msg insertUser(ClientUser user){
        user.setPassword(MD5.encrypt(user.getMobile().substring(5)));
        boolean flag = clientUserService.save(user);
        return flag ? Msg.success() : Msg.fail();
    }

    /**
     * 修改用户信息
     * @param user 用户信息
     * @return
     */
    @PutMapping("/updateUser")
    public Msg updateUser(ClientUser user){
        boolean flag = clientUserService.updateById(user);
        return flag ? Msg.success() : Msg.fail();
    }

    /**
     * 根据 id 或 手机号 查询用户信息
     * @param query 查询的条件
     * @return 统一返回对象Msg
     */
    @GetMapping("getUserListByQuery/{query}")
    public Msg getUserListByQuery(@PathVariable("query") String query){
        QueryWrapper<ClientUser> wrapper = new QueryWrapper<>();
        if(query.length() == 11){
            wrapper.eq("mobile", query);
        }else{
            wrapper.eq("id", query);
        }

        List<ClientUser> list = clientUserService.list(wrapper);

        return Msg.success().add("list", list);
    }
}

